package com.example.propertymanagement.controller;

import com.example.propertymanagement.dto.CommunityDTO;
import com.example.propertymanagement.entity.Community;
import com.example.propertymanagement.service.CommunityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * CommunityController：用于处理与小区相关的 HTTP 请求
 */
@RestController
@RequestMapping("/api/community") // 设置请求路径前缀
public class CommunityController {

    @Autowired
    private CommunityService communityService; // 注入 CommunityService

    /**
     * 获取所有小区信息
     * @return 返回小区信息的列表
     */
    @GetMapping("/list") // 设置 GET 请求路径
    public List<CommunityDTO> getCommunityList() {
        return communityService.getAllCommunities(); // 调用 Service 层获取小区信息
    }

    /**
     * 根据小区ID获取小区信息
     * @param id 小区ID
     * @return 返回小区DTO
     */
    @GetMapping("/{id}")
    public CommunityDTO getCommunityById(@PathVariable Integer id) {
        return communityService.getCommunityById(id)
                .orElseThrow(() -> new RuntimeException("小区未找到")); // 根据ID查询小区并返回DTO
    }

    /**
     * 根据小区编号查询小区信息
     * @param communityCode 小区编号
     * @return 返回小区DTO
     */
    @GetMapping("/code/{communityCode}")
    public CommunityDTO getCommunityByCode(@PathVariable String communityCode) {
        return communityService.getCommunityByCode(communityCode)
                .orElseThrow(() -> new RuntimeException("小区未找到")); // 根据小区编号查询小区并返回DTO
    }

    /**
     * 创建新小区
     * @param communityDTO 新的小区信息
     * @return 返回创建的小区信息
     */
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)  // 设置响应状态为创建成功
    public CommunityDTO createCommunity(@RequestBody CommunityDTO communityDTO) {
        return communityService.createCommunity(communityDTO);  // 调用Service层创建新小区
    }

    /**
     * 更新小区信息
     * @param id 小区ID
     * @param communityDTO 更新后的小区信息
     * @return 返回更新后的小区信息
     */
    @PutMapping("/{id}")
    public CommunityDTO updateCommunity(@PathVariable Integer id, @RequestBody CommunityDTO communityDTO) {
        communityDTO.setId(id);  // 设置更新的ID
        return communityService.updateCommunity(id, communityDTO);  // 调用Service层更新小区
    }

    /**
     * 删除小区信息
     * @param id 小区ID
     * @return 删除成功信息
     */
    @DeleteMapping("/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT)  // 设置响应状态为无内容
    public void deleteCommunity(@PathVariable Integer id) {
        communityService.deleteCommunity(id);  // 调用Service层删除小区
    }
}